// TypeScript 的类型系统允许您使用各种运算符从现有类型中构建新类型。现在我们知道如何编写几种类型，是时候开始以有趣的方式组合它们了。

//什么是联合类型？
    // 用现有的类型和运算符(| & ) 构建新类型

// 怎么使用联合类型？
    // 1、定义
        // 类型1 | 类型2  就是定义了一个联合类型，表示值要么是类型1，要么是类型2
    // 2、使用
        // 在对联合类型的值进行操作时，ts会对每种子类型都进行校验，只有每种类型都通过，才能对值进行这个操作
 function logId(id:string|number){
     if(typeof id === "string"){  // ts能读懂这个判断变量类型的js代码，缩小变量的类型范围。   
         id.toLowerCase() //这里id由联合类型变成了string，所以调用toLowerCase方法不报错
     } else {
         id.toFixed()
     }
 }
 logId('A')


 function welcomePeople(x: string[] | string) {
    if (Array.isArray(x)) {  //此处通过js的类型判断代码，缩小联合类型的变量的类型范围，以增加代码的健壮性 
        // Array.isArray方法判断一个变量是否是数组，如果是数组，返回true，否则返回false
      // Here: 'x' is 'string[]'
      console.log("Hello, " + x.join(" and "));
    } else {
      // Here: 'x' is 'string'
      console.log("Welcome lone traveler " + x);
    }
  }